package com.company;

import java.util.Arrays;
import java.util.Objects;
import java.util.Stack;

/**
 * 150. 逆波兰表达式求值
 * 根据 逆波兰表示法，求表达式的值。
 *
 * 有效的算符包括 +、-、*、/ 。每个运算对象可以是整数，也可以是另一个逆波兰表达式。
 *
 * 注意 两个整数之间的除法只保留整数部分。
 *
 * 可以保证给定的逆波兰表达式总是有效的。换句话说，表达式总会得出有效数值且不存在除数为 0 的情况。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/evaluate-reverse-polish-notation
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

public class Solution150 {
    public static int evalRPN(String[] tokens) {
        Stack<Integer> stack=new Stack<>();
        for (String c:tokens)
        {
            if(Objects.equals(c, "+"))
            {
                stack.push(stack.pop()+stack.pop());
            }else if (Objects.equals(c, "-"))
            {
                stack.push(-stack.pop()+stack.pop());
            }else if(Objects.equals(c, "*"))
            {
                stack.push(stack.pop()*stack.pop());
            }else if(Objects.equals(c, "/"))
            {
                int num1=stack.pop();
                int num2=stack.pop();
                stack.push(num2/num1);
            }else
            {
                stack.push(Integer.parseInt(c));
            }
        }
        return stack.pop();
    }

    public static void main(String[] args) {
        String[] strings={"4","13","5","/","+"};
        System.out.println(evalRPN(strings));
    }
}
